import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDivElement;
import com.zl.core.jdbc.DataSource.DsFactory;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.WebDriver;
import zl.selenium.Drivers;
import zl.selenium.Utils_Selenium;

import java.io.IOException;
import java.sql.Connection;
import java.util.List;

public class main_run
{
/*
<select onchange="redirectpage(this.value)" id="seleyear" value="2018年">
	<option value="2018年">0</option>
	<option value="2017年" >1</option>
	<option value="2016年">2</option>
	<option value="2015年">3</option>
	<option value="2014年">4</option>
	<option value="2013年">5</option>
	<option value="2012年">6</option>
	<option value="2011年">7</option>
	<option value="2010年">8</option>
	<option value="2009年">9</option>
	<option value="2008年">10</option>
</select>
* */
static int year=3;
static String month="";

/*
页面更新：2018年5月29日 星期二
    起始时间：<input class="search_date" id="search_date_start" readonly="readonly" value="2018-04-26" onclick="WdatePicker()" type="text">
    截止时间：<input class="search_date" id="search_date_end" readonly="readonly" value="2018-06-13" onclick="WdatePicker()" type="text">
    查询按钮：<div class="search_btn"></div>
    */

    private static String date_star  ="search_date_start";//起始时间
    private static String date_end   ="search_date_end";//截止时间
    private static String query      ="search_btn";//查询按钮-《class="search_btn"》

private static DsFactory dsFactory;
private static Connection connection;
static
{
    dsFactory=new DsFactory("dbtt");
    connection= dsFactory.getConnection();
}


public static void main(String[] as) throws IOException
{
        //谷歌
        WebClient webclient = new WebClient(BrowserVersion.CHROME);
        WebDriver webDriver =new Drivers().getDriver_chrome();
        //火狐
/*        final WebClient webclient = new WebClient(BrowserVersion.FIREFOX_52);
        WebDriver webDriver =new Drivers().getDriver_firefox();*/

        //WebDriver webDriver =new Drivers().getDriver_chrome();
        // 这里是配置一下不加载css和javaScript,配置起来很简单，是不是

        webclient.getOptions().setUseInsecureSSL(true);//支持https
        webclient.getOptions().setJavaScriptEnabled(true); // 启用JS解释器，默认为true
        webclient.getOptions().setCssEnabled(false); // 禁用css支持
        webclient.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时，是否抛出异常
        webclient.getOptions().setTimeout(0); // 设置连接超时时间 ，这里是10S。如果为0，则无限期等待
        webclient.getOptions().setDoNotTrackEnabled(false);
        webclient.setJavaScriptTimeout(1000);//设置js运行超时时间
        webclient.waitForBackgroundJavaScript(1000);//设置页面等待js响应时间,
        //webclient.setAjaxController(new NicelyResynchronizingAjaxController());

        // 做的第一件事，去拿到这个网页，只需要调用getPage这个方法即可
        // 默认加载:2017.12 月数据-解禁企业列表
        //final HtmlPage htmlpage_root = (HtmlPage) webclient.getPage("http://data.eastmoney.com/dxf/default.html");
    //1.0 限售股解禁一览-页面打开
    String url_root="http://data.eastmoney.com/dxf/marketStatistics.aspx?tabType=day&market=0&sort=jjsj&startdate=2018-04-27&enddate=2018-06-14";
    final HtmlPage htmlpage_root = (HtmlPage) webclient.getPage(url_root);

    //      该方法在getPage()方法之后调用才能生效
            webclient.waitForBackgroundJavaScript(1000);
            webclient.setJavaScriptTimeout(1000);

    // 根据名字得到一个表单，查看上面这个网页的源代码可以发现表单的名字叫“f”
/*        final HtmlForm form = htmlpage.getFormByName("f");
        // 同样道理，获取”百度一下“这个按钮
        final HtmlSubmitInput button = (HtmlSubmitInput) form.getInputByValue("百度一下");
        // 得到搜索框
        final HtmlTextInput textField = (HtmlTextInput) form.getInputByName("q1");*/

    //** ***********************************************************************1.年份 [select:id=seleyear]-选择2015年
    //获取下拉选择框[年份]--2018年5月29日 星期二 以前的页面下拉年份选择框
    //HtmlSelect hs = (HtmlSelect) htmlpage_root.getElementById("seleyear");

    //2018年5月29日 星期二 更新后的日期选择框
    HtmlTextInput date_start = (HtmlTextInput) htmlpage_root.getElementById("search_date_start");
    System.out.println("-----------------------------------------------------------------选择开始日期:…"+date_start.getText());
    HtmlTextInput date_end = (HtmlTextInput) htmlpage_root.getElementById("search_date_end");
    System.out.println("-----------------------------------------------------------------选择终止日期:…"+date_end.getText());


    //1.1 限售股解禁一览-页面所有链接
    List<HtmlAnchor> achList= htmlpage_root.getAnchors();//选择年份=>获取刷新后的页面=>获取页面全部链接=>
    //htmlpage_root.getFullyQualifiedUrl("ID=953")
    System.out.println("achList = " + achList.size());


    //按要求选择第一个数据库 - 获取刷新后的页面--选择[year]年
    //HtmlPage htmlpage= (HtmlPage) hs.getOption(year).setSelected(true);//1.选择年份=>获取刷新后的页面
    //HtmlPage htmlpage= (HtmlPage) hs.click();//1.选择年份=>获取刷新后的页面
    System.out.println("-----------------------------------------------------------------选择开始日期:"+date_end.getText());

    //2018年5月30日 星期三 （获取：查询按钮）
    final HtmlDivision DivElement_search_btn= (HtmlDivision) htmlpage_root.getByXPath("//*[@id=\"page\"]/div[2]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div/div[3]").get(0);
    System.out.println("DivElement_search_btn =>>>>>>>>>>>>>>>>>>>>>>>>>>> " + DivElement_search_btn.getNodeValue());



    //1.2 限售股解禁一览-设置完日期点击“查询”
    //    选择年份=>2.获取刷新后的页面=>3.获取页面全部链接=>4.过滤[id]包含"month_"月份<a>标签=>5.点击月份-获取=>6.刷新后的页面
    HtmlPage htmlpage_query = DivElement_search_btn.click();

    List<HtmlAnchor> Clicks_tests= htmlpage_query.getAnchors();//选择年份=>获取刷新后的页面=>获取页面全部链接=>
    //htmlpage_root.getFullyQualifiedUrl("ID=953")
    System.out.println("Clicks_tests = " + Clicks_tests.size());

/********************************************************************************************************************************************************************************/
/*1.3 限售股解禁一览-页面    ************************************************************************************/
/********************************************************************************************************************************************************************************/
    String table_jjqy_list_str=htmlpage_query.getElementById("dt_1").getFirstElementChild().asText();//获取=>解禁企业列表-> id="dt_1"
            //System.out.println("= " +table_jjqy_list_str );//打印=>解禁企业列表

    System.out.println("解禁详细数据,保存中......." );
            //System.out.println("title = " + htmlpage_month.getTitleText());

    //5.点击月份-获取=>6.刷新后的页面=>7.过滤链接(解禁详细)
    //打印=>解禁详细链接
    //utils_Html_jsoup.printHtmlAnchor_containsXXX_AsText(htmlpage_month,"/dxf/detail/300217");
    //5.点击月份-获取=>6.刷新后的页面=>7.过滤链接(解禁详细)=>8. 获取解禁详细链接
    List<HtmlAnchor>    jjxqUrlList= Utils_Html.getUrlList_HtmlAnchor(htmlpage_query,"/dxf/detail","no");
    //** ***********************************************************************//5.点击月份-获取=>6.刷新后的页面=>7.过滤链接(解禁详细)=>8. 获取解禁详细链接
    System.out.println("jjxqUrlList = " + jjxqUrlList.size());

    int js=1;
    //2.0 解禁个股明细-页面
    for (HtmlAnchor jjxqurl:jjxqUrlList)
    {
        System.out.println("==>>开始打开页面: "+jjxqurl);
        String jjmx_url=jjxqurl.getHrefAttribute();

        jjmx_url="http://data.eastmoney.com"+jjmx_url;        System.out.println("解禁明细链接 = " + jjmx_url);
        //打印
        //Utils_Selenium.printHtml(url+jjmx_url);
        //Utils_Selenium.getHtml(url+jjmx_url,"no");
        //必须用完关闭
        //Utils_Selenium.close();

        //1.获取页面
        //HtmlPage htmlpage_jjmx=jjxqurl.click();//5.点击月份-获取=>6.刷新后的页面=>7.过滤链接(解禁详细)=>8. 获取解禁详细链接=>9.点击解禁详细-获取解禁详细页面
        //2.获取页面-url
        //String url=htmlpage_jjmx.asXml();
        HtmlService htmlService=new HtmlService();
        try
        {
            String jjmx_html_str=new Utils_Selenium(webDriver).getHtml(jjmx_url,"no");
            Element table= htmlService.getTable(jjmx_html_str,"td_1","yes");//9.点击解禁详细-获取解禁详细页面=>10.获取解禁表格
            System.out.println("解禁明细内容 table.text()= " + table.text());

            htmlService.getTable_2(table,"yes",connection);
            System.out.println("-----------------------------------------------------------------完成 " + jjxqurl+" 详细列表的[数据抓取]"+js++);
        }
        catch (NullPointerException e)
        {
            System.out.println("==>出现服务器错误无法访问: "+jjmx_url+"\n\n");
            // e.printStackTrace();
        }
        finally {
            continue;
        }

        }

        //Utils_Selenium.quit();
        webclient.close();//关闭窗口
}

}